Функцияларды блоктың Айнымалылар өрісінде немесе жауап мәтінінде #{...} арқылы тікелей шақыруға болады:

#{discord_add_role(message_from, '1465674567090704592')}

Discord серверінің, арнасының, рөлінің және хабарламасының идентификаторлары ұзын сандық мәндер болып табылады. Оларды көшірудің ең оңай жолы — Параметрлер → Қосымша → Әзірлеуші режимі қосу. Осыдан кейін кез келген нысанның контекстік мәзірінде Идентификаторды көшіру опциясы пайда болады.

Боттың қосылуы Discord-та чат-ботты қалай жасауға болады мақаласында сипатталған.

Хабарлама идентификаторын қайдан алуға болады

Блокты іске қосқан хабарламаның идентификаторы discord_message_id айнымалысында сақталады. Оны бөлек алудың қажеті жоқ:

#{discord_delete_message(discord_message_id)}

Алдын ала анықталған айнымалыларда жоқ деректер қажет болса, толық вебхук discord_webhook айнымалысында қолжетімді. Ол save_webhook айнымалысына қандай да бір мән тағайындалғанда толтырылады:

data = discord_webhook["data"]

msg_id = data["id"]

result = discord_reply_to_message(msg_id, "Бұл хабарламаға жауап")

Автоматты түрде жасалатын айнымалылар

Бұл айнымалылар әрбір оқиға үшін автоматты түрде толтырылады және қосымша конфигурацияны қажет етпейді.

Айнымалы Сипаттама Мысал
guild_id Сервер идентификаторы 1465674567090704591
discord_event Оқиға түрі бір сөзбен message
discord_message_id mid префиксімен хабарлама идентификаторы mid1465674569095319625
message_from uid префиксімен оқиға авторының идентификаторы uid413984787162726410
from_username Автордың Discord пайдаланушы аты 00rei
from_name Чаттағы автордың көрсетілетін аты Rus
username Ботқа тікелей хабарламалар үшін пайдаланушы аты 00rei
is_bot Оқиға авторы басқа бот болса, 1 0
nickname Сервердегі лақап аты; орнатылмаған болса, бос Moderator
roles Автордың рөл идентификаторларының тізімі ["1465674567090704592"]
is_admin Пайдаланушы әкімші немесе сервер иесі болса, 1 1
reply_from Жауап берілетін хабарлама авторының идентификаторы uid493121376652230668
reply_from_username Жауап берілетін автордың пайдаланушы аты _deikin
reply_from_name Жауап берілетін автордың көрсетілетін аты Rus
reply_to_bot Жауап ботқа берілсе, 1 0
reply_message_id Жауап берілетін хабарламаның идентификаторы mid1534837349219958804
reply_text Жауап берілетін хабарламаның мәтіні бүгін кім кезекші?

uid, cid және mid префикстері мәннің бөлігі болып табылады. Бұл айнымалыларды функцияларға сол күйінде беріңіз; префикстерді алып тастаудың қажеті жоқ.

from_name және from_username

from_name чатта пайдаланушыға жүгіну үшін пайдаланылуы керек атауды қамтиды:

  1. Сервердегі лақап аты, егер орнатылған болса.
  2. Аккаунттың көрсетілетін аты.
  3. Пайдаланушы аты.

Бұл сәлемдесулерде пайдалануға ұсынылатын айнымалы, себебі from_username _deikin немесе 00rei сияқты көрінуі мүмкін.

reply_* айнымалылары кіріс хабарлама басқа хабарламаға жауап болғанда ғана толтырылады. Кәдімгі хабарламалар үшін олардың барлығы тазартылады.

Сондықтан келесі шарт жауапты кәдімгі хабарламадан сенімді түрде ажыратады:

#{reply_from != ''}

nickname, roles және is_admin айнымалылары ағымдағы оқиғаның авторына қатысты.

Discord реакция оқиғалары үшін бұл деректерді бермейді, сондықтан әкімшіні тексеру хабарлама немесе қиғаш сызық командасы оқиғасында орындалуы керек.

Кіріс хабарлама мәтіні басқа арналардағы сияқты стандартты question айнымалысында сақталады.


Оқиғалар

Кәдімгі хабарламалардан басқа, қызметтік оқиғалар да воронкаға жіберіледі.

Олардың мәтіні question айнымалысында сақталады, сондықтан оларды кәдімгі мәтіндік шарттар арқылы өңдеуге болады.

discord_event question ішіндегі мәтін Қашан орын алады
message Хабарлама мәтіні Мүше хабарлама жібереді
message_edit Жаңартылған хабарлама мәтіні Хабарлама өңделеді
interaction /warn @user spam Қиғаш сызық командасы пайдаланылады немесе түйме басылады
reaction_add new_like ❤️ uid413984787162726410 Реакция қосылады
reaction_remove reaction_remove ❤️ uid413984787162726410 Реакция жойылады
message_delete message_delete mid1465674569095319625 Хабарлама жойылады
messages_delete_bulk messages_delete_bulk 12 Бірнеше хабарлама жойылады
member_join member_join uid413984787162726410 Мүше серверге қосылады
member_leave member_leave uid413984787162726410 Мүше серверден кетеді
member_update member_update uid413984787162726410 Мүшенің лақап аты немесе рөлдері өзгереді
member_ban member_ban uid413984787162726410 Мүшеге тыйым салынады
member_unban member_unban uid413984787162726410 Мүшеге тыйым алынады

Арнайы реакция үшін эмодзидің орнына арнайы эмодзи идентификаторы пайдаланылады:

new_like beer:1479419477396291696 uid413984787162726410

Толық ақпаратты Реакциялар бөлімінен қараңыз.

Егер блок тек мүшелер жіберген кәдімгі хабарламалар үшін іске қосылуы керек болса, келесі шартты қосыңыз:

discord_event == 'message'

Бұл барлық қызметтік оқиғаларды бірден сүзеді.

Тек оқиға мәтінін тексеру сенімсіз, себебі мүше member_join сияқты хабарламаны қолмен жібере алады.

Маңызды: member_update кез келген мүше жаңартуынан, соның ішінде боттың өзі тағайындаған рөлден де іске қосылады. member_update әрекетіне жауап беретін және рөл тағайындайтын блок цикл жасай алады, сондықтан мұндай шарттар әрқашан тиісті түрде шектелуі керек.


Хабарламалар

Функция Сипаттама
discord_send_message(channel_id, text) Кез келген арнаға хабарлама жіберу
discord_send_dm(user_id, text) Мүшеге тікелей хабарлама жіберу
discord_reply_to_message(message_id, text) Хабарламаға жауап беру
discord_edit_message(message_id, text) Бот жіберген хабарламаны өңдеу
discord_delete_message(message_id) Хабарламаны жою
discord_bulk_delete_messages(channel_id, message_ids) Бірден бірнеше хабарламаны жою
discord_get_message(channel_id, message_id) Хабарламаны алу
discord_pin_message(message_id) Хабарламаны бекіту
discord_unpin_message(message_id) Хабарламаны бекітуден алу

Discord шектеулері: Өз хабарламаларыңызды өңдеу немесе жою үшін уақыт шектеуі жоқ. Жаппай жою 14 күннен кем хабарламалар үшін ғана жұмыс істейді және бір уақытта 2-ден 100-ге дейін хабарламаны жоюға болады.


Реакциялар

Функция Сипаттама
discord_send_reaction(message_id, reaction) Реакция қосу
discord_delete_reaction(message_id, reaction, user_id) Реакцияны жою. Егер user_id көрсетілмесе, боттың реакциясы жойылады

reaction параметрі кәдімгі эмодзиді, мысалы ❤️, немесе арнайы сервер эмодзиінің идентификаторын қабылдайды.

Арнайы реакция идентификаторын қайдан алуға болады

Арнадағы кез келген хабарламаға қажетті арнайы реакцияны қосыңыз.

Чатта келесідей кері шақыру пайда болады:

new_like beer:1479419477396291696 uid413984787162726410

Мұнда:

beer:1479419477396291696

реакция идентификаторы болып табылады.

Сіз оны көшіріп, реакция функцияларында пайдалана аласыз:

#{discord_send_reaction(discord_message_id, 'beer:1479419477396291696')}

Кәдімгі эмодзилер кері шақыруларда өздерінің күйінде көрінеді:

new_like ❤️ uid413984787162726410

мұнда uid413984787162726410 реакцияны қосқан мүшенің идентификаторы.


Модерация

Функция Сипаттама
discord_timeout_member(user_id, seconds) Мүшені көрсетілген секунд санына, 28 күнге дейін тайм-аутқа жіберу
discord_remove_timeout(user_id) Тайм-аутты мерзімінен бұрын алып тастау
discord_kick_member(user_id) Мүшені серверден шығару; олар шақыру арқылы қайта орала алады
discord_ban_member(user_id, delete_message_seconds) Мүшеге тыйым салу; екінші аргумент хабарлама тарихының қанша секунд жойылатынын көрсетеді, 7 күнге дейін
discord_unban_member(user_id) Мүшеге тыйымды алып тастау

Discord боттың рөлінен жоғары рөлі бар мүшені модерациялауға рұқсат бермейді. Сервер иесін де модерациялау мүмкін емес.


Рөлдер және мүшелер

Функция Сипаттама
discord_add_role(user_id, role_id) Рөл тағайындау
discord_remove_role(user_id, role_id) Рөлді алып тастау
discord_get_roles() Сервердің рөлдерін және олардың идентификаторларын алу
discord_get_member(user_id) Лақап атын, рөлдерін және қосылған күнін қоса, мүше деректерін алу
discord_set_nickname(user_id, nickname) Мүшенің сервердегі лақап атын өзгерту

Боттың рөлі ол тағайындайтын рөлден жоғары болуы керек.

@everyone рөлі және интеграциялар басқаратын рөлдер, соның ішінде басқа боттарға тиесілі рөлдер тағайындалмайды.


Арналар және билеттер

Функция Сипаттама
discord_create_channel(name, type, parent_id, permission_overwrites) Арна жасау
discord_delete_channel(channel_id) Арнаны жою
discord_set_channel_permission(channel_id, target_id, allow, deny, type) Арна рұқсаттарына рұқсат беру немесе тыйым салу
discord_create_invite(channel_id, max_age, max_uses) Шақыру сілтемесін жасау
discord_get_invites() Сервердің шақыру сілтемелерін алу

discord_create_channel үшін әдепкі type:

Мән Арна түрі
0 Мәтіндік арна
2 Дауыстық арна
4 Санат

Арнаны сол санаттың ішінде жасау үшін parent_id параметріне санат идентификаторын бере аласыз.

discord_set_channel_permission үшін соңғы аргумент рұқсаттарды кім алатынын көрсетеді:

Мән Мақсат
1 Мүше
0 Рөл

allow және deny параметрлері келесі мәндерді қабылдайды:

Мән Рұқсат
1024 Арнаны көру
2048 Хабарламалар жіберу
3072 Арнаны көру және хабарламалар жіберу
65536 Хабарлама тарихын оқу

discord_create_invite үшін шақырудың жарамдылық мерзімі секундпен көрсетіледі.

Мысалы:

86400

24 сағатты білдіреді.

max_uses мәні 0 шектеусіз пайдалануды білдіреді.


Қиғаш сызық командалары

Функция Сипаттама
discord_get_commands() Серверде тіркелген командаларды алу
discord_set_commands(commands) Командалардың барлық жиынтығын ауыстыру

discord_set_commands командалар тізімін қабылдайды:

#{discord_set_commands('[
  {
    "name": "rules",
    "description": "Сервер ережелерін көрсету"
  },
  {
    "name": "warn",
    "description": "Ескерту беру",
    "options": [
      {
        "type": 6,
        "name": "user",
        "description": "Пайдаланушы",
        "required": true
      },
      {
        "type": 3,
        "name": "reason",
        "description": "Себеп",
        "required": false
      }
    ]
  }
]')}

Discord талаптары

  • name тек кіші әріптерден, бос орынсыз тұруы керек және 1-ден 32 таңбаға дейін болуы керек.
  • description міндетті және 1-ден 100 таңбаға дейін болуы керек.
  • Міндетті опциялар міндетті емес опциялардың алдында келуі керек.
  • Бос тізімді беру сервердегі барлық бот командаларын жояды.

Опция түрлері

Түрі Сипаттама
3 Жол
4 Бүтін сан
5 Логикалық
6 Мүше
7 Арна
8 Рөл

Команда шақырылғанда, ол воронкаға келесідей жол ретінде жіберіледі:

/warn @user spam

Басқаша айтқанда, команда аты мен опция мәндері бос орынмен бөлінген.

Сіз оны кәдімгі мәтіндік шарт арқылы өңдей аласыз.

Батырмалар үшін жеке функция қажет емес. Батырмалар кәдімгі жауап блогында конфигурацияланады, ал батырманы басу кері қиғаш сызықты команда сияқты қабылданады: батырманың мәні мәтінде пайда болады.


Ұпайлар және Көшбасшылар тақтасы

Discord интеграциясы кіріктірілген бағалау жүйесін қамтиды. Ұпайлар дәйексөз келтірілген хабарламаның авторына беріледі.

Сіз оны деңгейлер, дәрежелер және көшбасшылар тақтасын құру үшін пайдалана аласыз.

Функция Сипаттамасы
discord_add_thanks_score(value) Дәйексөз келтірілген хабарламаның авторына ұпай қосу
discord_add_thanks_score_for_answer(value) Жауап берген қатысушыға ұпай қосу
discord_minus_thanks_score(value) Ұпайларды алып тастау
discord_get_score(user_id) Қатысушының ұпайларын сан ретінде қайтару. Аргументсіз, оқиға авторын пайдаланады
discord_get_level(user_id, points_per_level) Қатысушының деңгейін алу. Әдепкі шек: деңгейге 100 ұпай
discord_get_user_info(user_id) Ұпайларды, көшбасшылар тақтасындағы орнын және атын бір нысан ретінде алу
discord_get_top(count, shift, humanize, delimiter) Көшбасшылар тақтасын алу

discord_get_top үшін:

  • count — қайтарылатын жолдар саны;
  • shift — өткізіп жіберуге болатын жолдар саны, беттеу үшін пайдалы;
  • humanize=true — көрсетуге дайын мәтінді қайтарады;
  • delimiter — қатысушының аты мен ұпайлары арасындағы бөлгіш.

Блок шартында ұпайларды салыстыру кезінде discord_get_score функциясын пайдаланыңыз. Бұл функция санды қайтарады, сондықтан сандық салыстырулар күтілгендей жұмыс істейді.


Мысалдар

Жаңа мүшені жеке хабарлама арқылы қарсы алу

Блок шарты:

member_join

Айнымалылар өрісінде:

discord_send_dm(
    message_from,
    'Сәлем, #{from_name}! Бекітілген ережелерді қараңыз.'
)

Тоқтату сөзі бар хабарламаны жою және мүшені 24 сағатқа тайм-аутқа жіберу

Блок шарты: тоқтату сөздерінің тізімі.

Қосымша шарт:

is_admin != 1

Функциялар:

discord_delete_message(discord_message_id)

discord_timeout_member(message_from, 86400)

Белгілі бір хабарламаға реакция үшін рөл тағайындау

Блок шарты:

new_like 🍕

Қосымша шарт:

contains(discord_message_id, '1534927170965602324')

Функция:

discord_add_role(
    message_from,
    '1465674567090704592'
)

Батырмадан жеке билет арнасын құру

ticket = discord_create_channel(
    'ticket-' + from_username
)

ticket_channel = get(
    get(ticket, 'data'),
    'id'
)

discord_set_channel_permission(
    ticket_channel,
    guild_id,
    None,
    1024,
    0
)

discord_set_channel_permission(
    ticket_channel,
    message_from,
    3072,
    None,
    1
)

discord_send_message(
    ticket_channel,
    'Мәселеңізді бір хабарламада сипаттаңыз.'
)

Бірінші рұқсат жолы арнаны барлығынан жасырады (мұнда guild_id @everyone рөлін білдіреді).

Екінші жол арнаны билетті жасаған мүшеге қолжетімді етеді.


Рахмет үшін ұпай беру және деңгейге негізделген рөл тағайындау

Блок шарты:

thanks;thx;thank you

Қосымша шарт:

reply_from != '' and reply_from != message_from and reply_to_bot != 1

Функциялар:

discord_add_thanks_score(1)

if (discord_get_level(reply_from) >= 1) {
    discord_add_role(
        reply_from,
        '1465674567090704592'
    )
}

Шарт:

reply_from != message_from

мүшелердің өздеріне ұпай беруіне жол бермейді.

Шарт:

reply_to_bot != 1

ботқа ұпай берілуіне жол бермейді.


Команда арқылы өз ұпайларыңызды көрсету

Блок шарты:

/xp

Айнымалылар өрісінде:

points = discord_get_score()

lvl = discord_get_level()

Жауап мәтіні:

#{from_name}, сізде #{points} XP · #{lvl} деңгей

Команда арқылы көшбасшылар тақтасын көрсету

Блок шарты:

/top

Жауап мәтіні:

🏆 XP көшбасшылар тақтасы:

#{discord_get_top(10, 0, true, ' — ')}